Predani retezce mezi procesy

Otázka od: Pavel Poles

24. 6. 2004 11:39

Zdravim konferneci.

Snazim se pouzivat tento kod k vypsani seznamu
tlacitek v pruhu uloh:

var
  H: HWND;
  i,j: integer;
  Buffer : PChar;
  S: LPSTR;
begin
  H:=FindWindow('Shell_TrayWnd',nil);
  H:=FindWindowEx(H,0,'ReBarWindow32',nil);
  H:=FindWindowEx(H,0,'MSTaskSwWClass',nil);
  H:=FindWindowEx(H,0,'ToolbarWindow32',nil);
  i:=SendMessage(H,TB_BUTTONCOUNT,0,0);
    
a ted:

  for i:=0 to i-1 do begin
    GetMem(Buffer,SendMessage(H,TB_GETBUTTONTEXT,i,0));
    SendMessage(H,TB_GETBUTTONTEXT,i,LongInt(@Buffer));
    LB.Items.Add(IntToStr(i)+' - '+string(Buffer));
    FreeMem(Buffer);
  end;

nebo

  for i:=0 to i-1 do begin
    S:=PChar(GlobalAlloc(GMEM_FIXED or GMEM_ZEROINIT or GMEM_SHARE
,SendMessage(H,TB_GETBUTTONTEXT,i,0)));
    SendMessage(H,TB_GETBUTTONTEXT,i,LongInt(@S));
    LB.Items.Add(IntToStr(i)+' - '+string(S));
    GlobalFree(S);
  end;

Ani jedno z toho nefunguje. Dozvedel jsem se ze je to tim ze tem message
posilam vlastne jinemu procesu, ktery ma jiny pametovy prostor a proto
mu predavam v podstate nesmyslny pointer.

Existuje nejak zpusob jak alokovat pamet pro tento pointer tak aby byl
pouzitelny v tomto pripade?
Nebo existuje nejaky jiny zpusob jak nalezt tlacitko na pruhu uloh, resp.
schovat ho (krome WS_EX_TOOLBARWINDOW nebo SetParent)?

Predm dik za odpovedi

Pavel Poles

Odpovedá: delphin@post.cz

24. 6. 2004 12:28

Na sdileni pameti mezi dvema procesy je treba pouzit pouzit
CreateFileMapping pripadne message WM_COPYDATA.